Practical উদাহরণ: API Input Validation

Java Technologies - জেসন (JSON) - JSON Schema এবং Validation
158

API ইনপুট ভ্যালিডেশন হল একটি অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপ্লিকেশন থেকে ইনপুট ডেটা সঠিকভাবে প্রাপ্ত হচ্ছে কিনা তা নিশ্চিত করে। যদি ইনপুট ডেটা ঠিক না হয়, তবে তা অ্যাপ্লিকেশনের সঠিক কার্যকারিতা ব্যাহত করতে পারে। JSON ফরম্যাটে ইনপুট ডেটা পাঠানো হলে, Java-তে এই ইনপুট ডেটার ভ্যালিডেশন করা যায় সহজেই।

এখানে আমরা দেখব কিভাবে একটি RESTful API তৈরি করা যায় যেখানে JSON ইনপুট ডেটা গ্রহণ করা হয় এবং সেই ডেটার ভ্যালিডেশন করা হয়।

স্টেপ বাই স্টেপ উদাহরণ:


১. Maven Dependency

আপনি যদি Maven ব্যবহার করেন, তাহলে প্রথমে প্রয়োজনীয় লাইব্রেরি যোগ করতে হবে। এখানে আমরা Jackson লাইব্রেরি ব্যবহার করব JSON ডেটা পার্সিংয়ের জন্য এবং Hibernate Validator ব্যবহার করব ইনপুট ভ্যালিডেশনের জন্য।

<dependencies>
    <!-- Jackson JSON Processor -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.5</version>
    </dependency>

    <!-- Hibernate Validator -->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.1.0.Final</version>
    </dependency>

    <!-- Bean Validation API -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
</dependencies>

২. Java ক্লাস তৈরি করা (DTO - Data Transfer Object)

API ইনপুট ভ্যালিডেশনের জন্য প্রথমে একটি ক্লাস তৈরি করতে হবে যেটি JSON ইনপুট ডেটা ধারণ করবে। এখানে আমরা User নামের একটি ক্লাস তৈরি করব যেটি ব্যবহারকারীর নাম, বয়স এবং ইমেইল ধারণ করবে এবং আমাদের প্রয়োজনীয় ভ্যালিডেশন যুক্ত করব।

import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;

public class User {

    @NotNull(message = "Name cannot be null")
    private String name;

    @Min(value = 18, message = "Age must be greater than or equal to 18")
    private int age;

    @Email(message = "Invalid email format")
    private String email;

    // গেটার এবং সেটার মেথড
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

এখানে আমরা @NotNull, @Min, এবং @Email অ্যনোটেশন ব্যবহার করেছি, যা ইনপুট ডেটার ভ্যালিডেশন করতে সহায়তা করবে।

৩. API Controller তৈরি করা

এখন একটি REST API কন্ট্রোলার তৈরি করতে হবে যেখানে ব্যবহারকারী JSON ডেটা POST রিকোয়েস্টের মাধ্যমে পাঠাবে এবং ইনপুট ভ্যালিডেশন করা হবে।

import com.fasterxml.jackson.databind.ObjectMapper;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.Set;

@Path("/user")
public class UserController {

    // Validator ইনস্ট্যান্স
    private static Validator validator;

    static {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        validator = factory.getValidator();
    }

    @POST
    @Path("/create")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response createUser(String jsonInput) {
        try {
            // JSON থেকে User অবজেক্টে রূপান্তর
            ObjectMapper objectMapper = new ObjectMapper();
            User user = objectMapper.readValue(jsonInput, User.class);

            // ইনপুট ভ্যালিডেশন
            Set<javax.validation.ConstraintViolation<User>> violations = validator.validate(user);

            if (!violations.isEmpty()) {
                StringBuilder errorMessage = new StringBuilder();
                for (javax.validation.ConstraintViolation<User> violation : violations) {
                    errorMessage.append(violation.getMessage()).append("\n");
                }
                return Response.status(Response.Status.BAD_REQUEST)
                        .entity("{\"error\":\"" + errorMessage.toString() + "\"}")
                        .build();
            }

            // যদি কোনো ত্রুটি না থাকে, সাফল্য মেসেজ পাঠানো
            return Response.status(Response.Status.OK).entity("{\"message\":\"User created successfully\"}").build();
        } catch (Exception e) {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                    .entity("{\"error\":\"Error processing request\"}")
                    .build();
        }
    }
}

এখানে, POST /create এ API পদ্ধতি, JSON ইনপুট গ্রহণ করে, Jackson ObjectMapper ব্যবহার করে User অবজেক্টে রূপান্তরিত করছে। তারপর Hibernate Validator ব্যবহার করে ইনপুট ডেটা ভ্যালিডেট করা হচ্ছে।

৪. পোস্টম্যান (Postman) দিয়ে API টেস্ট করা

এখন আমরা Postman বা অন্য কোন API টেস্টিং টুল ব্যবহার করে এই API টেস্ট করতে পারি। নিচে কিছু ইনপুট উদাহরণ দেয়া হলো:

সঠিক ইনপুট:

{
    "name": "John",
    "age": 25,
    "email": "john.doe@example.com"
}

এখানে ইনপুট সঠিক হলে, সাফল্য মেসেজ ফিরিয়ে আসবে:

{
    "message": "User created successfully"
}

ভুল ইনপুট:

  1. যদি age 18 এর নিচে থাকে:
{
    "name": "John",
    "age": 15,
    "email": "john.doe@example.com"
}

এই ক্ষেত্রে, ত্রুটি মেসেজ আসবে:

{
    "error": "Age must be greater than or equal to 18"
}
  1. যদি email সঠিক ফরম্যাটে না থাকে:
{
    "name": "John",
    "age": 25,
    "email": "john.doe"
}

এক্ষেত্রে ত্রুটি মেসেজ আসবে:

{
    "error": "Invalid email format"
}

সারাংশ


এই উদাহরণে দেখানো হয়েছে কিভাবে Java দিয়ে JSON ইনপুট ভ্যালিডেশন করা যায়। Hibernate Validator ব্যবহার করে JSON ইনপুটের বিভিন্ন ফিল্ডের ভ্যালিডেশন চেক করা হয়েছে, যেমন বয়স ১৮ এর বেশি হওয়া, নামের ফিল্ডের নাল না হওয়া এবং ইমেইল ফরম্যাট সঠিক হওয়া। এর ফলে, REST API এর ইনপুট ভ্যালিডেশন আরও সহজ এবং কার্যকর হয়, যা অ্যাপ্লিকেশনের সঠিক কার্যকারিতা নিশ্চিত করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...